package com.huangsm.webmagic;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.scheduler.FileCacheQueueScheduler;

/**
 * 爬取类
 *
 * @author huang
 * @PACKAGE_NAME com.huangsm.webmagic
 * @PROJECT_NAME webmagic
 * @date 2019/1/29
 */

public class MyProcessor implements PageProcessor {
    @Override
    public void process(Page page) {
        page.addTargetRequests(page.getHtml().links()
                .regex("https://blog.csdn.net/weixin_36964056/article/details/[0-9]{8}").all());
        /*System.out.println(page.getHtml().toString());*/
        //page.putField("title", page.getHtml().xpath("//* [@id=\"mainBox\"]/main/div[1]/div[1]/h1/text()").toString());
        page.putField("title", page.getHtml().toString());
    }

    @Override
    public Site getSite() {
        return Site.me().setSleepTime(100).setRetryTimes(3);
    }

    /**
     * Spider是爬虫启动的入口。在启动爬虫之前，
     * 我们需要使用一个PageProcessor创建一个Spider对象，然后使用run()进行启
     *
     *
     * FilePipeline文件保存 addPipeline(new FilePipeline("H:/datatest"))
     * JsonFilePipeline以json方式保存 addPipeline(new JsonFilePipeline("H:/datatest"))
     *
     * 目前scheduler主要有三种实现方式：
     * 1）内存队列 QueueScheduler
     * 2）文件队列 FileCacheQueueScheduler
     * 3) Redis队列 RedisScheduler
     * @param args
     */
    /*public static void main(String[] args) {
        Spider.create(new MyProcessor())
                .addUrl("https://blog.csdn.net/weixin_36964056")
                .addPipeline(new ConsolePipeline())
                //JsonFilePipeline以json方式保存
                //.addPipeline(new JsonFilePipeline("H:/datatest"))
                //定制化输出
                .addPipeline(new MyPipeline())
                .run();
    }*/
    /**
     * 内存队列
     * 使用setScheduler来设置Scheduler
     */
   /* public static void main(String[] args) {
        Spider.create(new MyProcessor())
                .addUrl("https://blog.csdn.net/weixin_36964056")
                //.addPipeline(new ConsolePipeline())
                //定制化输出
                //.addPipeline(new MyPipeline())
                .setScheduler(new QueueScheduler())
                .run();
    }*/

    /**
     * 文件队列
     * 使用文件保存抓取URL，可以在关闭程序并下次启动时，从之前抓取到的URL继续
     */
    public static void main(String[] args) {
        Spider.create(new MyProcessor())
                .addUrl("https://blog.csdn.net/weixin_36964056")
                //设置文件队列
                .setScheduler(new
                        FileCacheQueueScheduler("H:/datatest"))
                .run();
    }
    /**
     * 使用Redis保存抓取队列，可进行多台机器同时合作
     */
    /*public static void main(String[] args) {
        Spider.create(new MyProcessor()).addUrl("https://blog.csdn.net/weixin_36964056")
                .setScheduler(new RedisScheduler("127.0.0.1"))//设置Redis队列
                .run();
    }*/
}